'''

1.program:
    > module >
    <<<<<<<<<<

2.module:
    > type definition       >
    > declaration           >
    > e-data definition     >
    > function definition   >
    <<<<<<<<<<<<<<<<<<<<<<<<<

3.type definition:
                >>>>>>>>>>>>>>>>>>>>>
    > typedef   > type specifier    >  dec_list > ;
    > struct    >>>>>>>>>>>>>>>>>>>>>
    > enum      >>>>>>>>>>>>>>>>>>>>>

4.declaration:
    > extern    > type specifier  > dec_list  > ;

5.e-data definition:
    > static    > type specifier    > init-dec list > ;
    >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

6.function definition:
> static    > void              >  func dec > type decl list > block
>>>>>>>>>>>>> type specifier    >           >>>>>>>>>>>>>>>>>>

7.type specifier:
    >>>>>>>>>>>>>
                > base_type                     >
    > sign_flag >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    >>>>>>>>>>>>> struct_list (struct spec)     >
    >>>>>>>>>>>>> enum                          >

/* 指针，数组，变量， 函数... */
8.dec_list:
    > declarator    >
    < ,             <

9.declarator:
    > identifier                                    >
    > ( > declarator    > )                         >
    > * > declarator                                >
    > declarator    > ( > )                         >
    > declarator    > [ >>>>>>>>>>>>>>>>>>>>>>> ]   >
                        > constant expression >

10.func dec:
    > func head         >
    > ( > func dec  > ) >
    > * > func dec      >
    > func dec > (  > ) >
    > func dec > (  > ) >

11.func head:
    > identifier    > ( > identifier    > ) >
                        < ,             <

12.type decl list:
    > type specifier    > dec_list  > ; >
    <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

13.block:
    > { >>>>>>>>>>>>>>>>>>>>> } >
        < type definition   <
        < declaration       <
        < i-data definition <
        < statement         <

14.i-data definition:
    >>>>>>>>>>>>> type specifier    > init-dec list > ; >
    > auto      >>>>>>>>>>>>>>>>>>>>>
    > register  >
    > static    >

15.initializer:
    > expression            >
    > { > initializer   > } >
        < ,             <

16.init-dec list:
    > declarator    >>>>>>>>>>>>>>>>>>>>>>
                    > = > initializer   >
    < ,                                 <

17.enum spec
    > enum  > identifier    >>>>>>>>>>>>>>>>>>>>>>>>>>
            >>>>>>>>>>>>>>>>> { > enumerator    > } >
                                < ,             <

18.enumerator:
    > identifier    >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
                    > = > constant expression   >

19.struct spec:
    > struct    > identifier    >>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    > union     >>>>>>>>>>>>>>>>> { > struct dec    >  }    >
                                    < ;             <

20.struct dec:
    > type specifier    > declarator    >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
                        >>>>>>>>>>>>>>>>> : > constant expression   >
                        < ,                                         <

21.statement:
    >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ; >
    > return        > expression    >
    > break                         >
    > continue                      >
    > goto          > identifier    >
    > if                                >
    > switch                            >
    > do                                >
    > while                             >
    > for                               >
    > block                             >
    > identifier    > : > statement     >

22.expression:
    > constant
    > term                                                          >
    > expression    > binop                 > expression            >
    > term          > asgnop        > expression                    >
    > expression    > ?             > expression    > : expression  >
    > &             > term                                          >
    > ++            >
    > --            >
    > term          > ++                                            >
                    > --                                            >
    > -             > expression                                    >
    > !             >
    > ~             >
    > (             > type name     > ) expression                  >
    > (             > expression    > )                             >

23.term:
    > identifier                    >>
    > term  > [ > expression    > ] >
    > term  > ( >>>>>>>>>>>>>>>>> ) >
                > expression    >
    > *     > expression            >
    > term  > "."   > identifier    >
    > term  > "->"  > identifier    >
    > (     > term  > )             >

24.constant expression:
    > int constant                                                                                      >
    > char constant                                                                                     >
    > enum constant                                                                                     >
    > sizeof expression                                                                                 >
    > (                     > constant expression   > )                                                 >
    > constant expression   > binop A               > constant expression                               >
    > -                     > constant expression                                                       >
    > ~                     >
    > constant expression   > ?                     > constant expression   > : > constant expression   >

25.binop A:
    "*","/","%","+","-",">>","<<",">","<","<=",">=","==","!=","&","^","|"

26.binop B:
    "&&","||",","

27.binop:
    binop A,B

28.asgnop:
    "=","+=","-=","*=","/=","%=",">>=","<<=","&=","^=","|="

29.sizeof expression:
    > sizeof    > expression            >
                > ( > type name >  )    >

30.type name:
    > type specifier    > abstract declarator   >>
                        >>>>>>>>>>>>>>>>>>>>>>>>>

31.abstract declarator:
    > (                     > abstract declarator   > ) >
    > *                     > abstract declarator       >
    > abstract declarator   > (                     > ) >
    > abstract declarator   > [                     >>>>>>>>>>>>>>>>>>>>>>>>>>>>> ] >
                                                    > constant expression       >

32.if:
    > "if"  > ( > expression    > ) > statement >>>>>>>>>>>>>>>>>>>>>>
                                                > else  > statement >

33.switch:
    > "switch"  > ( > expression    > ) > case statement    >

34.case statement:
    > { > case  > constant expression   > : > statement > } >
                                            <<<<<<<<<<<<<
        > default                       >
        <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
        <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

35.while:
    > "while"   > ( > expression    > ) > statement >

36.for:
    > "for" > ( > expression    > ; > expression    > ; > expression    > ) > statement >
                >>>>>>>>>>>>>>>>>   >>>>>>>>>>>>>>>>>   >>>>>>>>>>>>>>>>>

37.do:
    > "do"  > statement > "while"   > ( > expression    > ) > ; >

38.constant:
    > int constant      >>
    > char constant     >
    > string constant   >
    > float constant    >
    > sizeof expression >

39.int constant:
                            > L >
    > decimal constant      > I >>
    > octal constant        >
    > hexadecimal constant  >

40.char constant:
    > ' > char lit  > ' >

41 string constant:
    > " > char lit  > " >
        <<<<<<<<<<<<<

42.float constant:
                                    >>>>>>>>>>>>>>>>>>>>>>>>>
    > f-decimal constant    > "."   > f-decimal constant    >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    > "."                   > f-decimal constant            > e/E > +/- > f-decimal constant    >

43.f-decimal constant:
    >>>>>> decimal constant >
    > 0  >

44.decimal constant:
    > non-zero decimal  >>>>>>>>>>>>>>>>>>>>>>
                        <  decimal digit    <

45.deciaml digit:
    > 0                 >>
    > non-zero decimal  >

46.non-zero decimal:
    > non-zero octal    >>
    > 8                 >
    > 9                 >

47.octal constant:
    > 0 >>>>>>>>>>>>>>>>>>
        < octal digit   <

48.octal digit:
    > 0 >>>>>>>>>>>>>>>>>>>>>>
        < non-zero octal    <

49.non-zero octal:
    1~7

50.hexadecimal constant:
    > 0x/0X >>>>>>>>>>>>>>
            < hex digit <

51.hexa digit:
    > decimal digit >
    > a~f/A~F       >

52.enumerator constant:
    > identifier    >

53.identifier:
                <<<<<<<<<<<<<<<<<
                > "_"           >
                > digit         >
                > letter        >
    > letter    >>>>>>>>>>>>>>>>>>
    > "_"       >

54.letter:
    > A~Z / a~z >

55.char lit:
    '!','"','~','\b','\n','\r','\t','\f','\\','\'','\"','\','\','\',

56.comment:
    > //    >   end of line             >>
    > /*    >   any charactor   > */    >
'''
